package no.nordicsemi.android.nrfmesh.auth.util;

import android.content.Context;
import android.content.SharedPreferences;

import androidx.security.crypto.EncryptedSharedPreferences;
import androidx.security.crypto.MasterKey;

/**
 * 用于保存少量敏感字段（密码、最近账号等）。
 * 注意：不把密码放 Room；只放到 ESP（加密偏好）。
 */
public class CredentialStore {

    private final SharedPreferences esp;

    /**
     * 修改点：构造函数不再抛出异常；如果加密偏好初始化失败，自动回退到普通 SharedPreferences，
     * 确保在不支持 TEE/密钥库的设备上也不会崩溃。
     */
    public CredentialStore(Context ctx) {
        SharedPreferences fallback;
        try {
            MasterKey key = new MasterKey.Builder(ctx)
                    .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
                    .build();
            fallback = EncryptedSharedPreferences.create(
                    ctx,
                    "cred_store",
                    key,
                    EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
                    EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
            );
        } catch (Throwable t) {
            // 修改点：回退到普通 SP（仅用于开发/低安全环境），避免因 ESP 初始化失败而崩溃
            fallback = ctx.getSharedPreferences("cred_store_fallback", Context.MODE_PRIVATE);
        }
        this.esp = fallback;
    }

    // ======== 密码存取（仅开发期；发布时建议改为 token/摘要而非明文） ========
    public void savePassword(String userId, String plain) {
        esp.edit().putString("pwd_"+userId, plain).apply();
    }
    public String getPassword(String userId) {
        return esp.getString("pwd_"+userId, null);
    }
    public void removePassword(String userId) {
        esp.edit().remove("pwd_"+userId).apply();
    }

    // ======== 最近使用账号 ========
    public void setLastUser(String userId) {
        esp.edit().putString("last_user", userId).apply();
    }
    public String getLastUser() { return esp.getString("last_user", null); }

    // ======== 每个账号的自动登录开关 ========
    public void setAutoLogin(String userId, boolean enabled){
        esp.edit().putBoolean("auto_"+userId, enabled).apply();
    }
    public boolean isAutoLogin(String userId){
        return esp.getBoolean("auto_"+userId, false);
    }

    // 清空最近用户
    public void clearLastUser() { esp.edit().remove("last_user").apply(); }
}
